/**
 * 基于JQUERY对IPTV操作进行封装
 * Created by 杨浩宇 on 2016/9/6 0006.
 */
(function (factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // CommonJS
        factory(require('jquery'));
    } else {
        // Browser globals
        factory(jQuery);
    }
}(function ($) {
    /**
     * 针对页面按钮相应事件进行封装
     */
    $(window).keypress(function(event){
        var keyCode = event.keyCode; //获取当前页面的点击按键值
        switch(keyCode){
            case ROC_IRKEY_UP:
                $.iptv.up();
                break;
            case ROC_IRKEY_DOWN:
                $.iptv.down();
                break;
            case ROC_IRKEY_LEFT:
                $.iptv.left();
                break;
            case ROC_IRKEY_RIGHT:
                $.iptv.right();
                break;
            default:
                break;
        }
    });

    /**
     * 针对IPTV的遥控器页面控制操作进行封装，
     * 实现思路为页面的可操作区域，抽象为横纵坐标的二维坐标系。
     * 前端按照操作顺序和二维坐标，在对应的html组件上增加对应名称的CSS样式表
     * 利用CSS样式标签选择器来获取对应的选中对象
     */
    $.extend({
        iptvgroup:{
            blocks:new Array(),
            groupx: 0,//分组横坐标
            groupy: 0,//分组纵坐标
            groupPrefix:'iptvgroup_',
            //按钮向上点击事件
            up:function(){
                this.move(0);
            },
            //按钮向下点击事件
            down:function(){
                this.move(2);
            },
            //按钮向左点击事件
            left:function(){
                this.move(3);
            },
            //按钮向右点击事件
            right:function(){
                this.move(1);
            },
            move:function(direction){ //direction 方向编码  0-up,1-right,2-down,3-left
                var block = blocks[groupx][groupy];
                var newx = block.x;
                var newy = block.y;
                var new_groupx = this.groupx;
                var new_groupy = this.groupy;
                switch(direction){
                    case 0://up
                        newy = newy-1
                        new_groupy = new_groupy-1;
                        break;
                    case 1://right
                        newx = newx+1;
                        new_groupx = new_groupx+1;
                        break;
                    case 2://down
                        newy = newy+1
                        new_groupy = new_groupy+1;
                        break;
                    case 3://left
                        newx = newx-1;
                        new_groupx = new_groupx-1;
                        break;
                }

                if(newx> block.row || newx<1 || newy > block.col ||newy < 1){ //操作越界
                    //判断是否有其他区块
                    var otherBlock = blocks[new_groupx][new_groupy];
                    if(otherBlock){//如果企图越界的方向存在其他区块
                        this.groupx = new_groupx;
                        this.groupy = new_groupy;
                        block.blockUnfocus();//对当前区块做失去焦点处理
                        otherBlock.blockFocus();//选中越界后的区块，做获取焦点处理，如默认选中等等。
                    }else{//如果不存在可越界区块 停留在原地
                        this.checked(); //如果存在设为选中状态
                        return ;
                    }

                }else{
                    var oldId = block.uncheck().attr("id"); //设置当前元素为非选中状态
                    block.x = newx; //移动横坐标
                    block.y = newy; //移动纵坐标
                    var newObj = block.getObj();
                    if(newObj && oldId != newObj.attr("id"))//如果待位移的元素存在或者ID不重复
                    {
                        block.checked(); //如果存在设为选中状态
                    }else{              //如果不存在
                        this.move(direction);      //位移一位
                    }
                }
            },
            //按钮返回点击事件
            back:function(){

            }
        },
        iptv_block:{
            /**
             * 针对一个页面中划分为多个区块，如左侧菜单，顶部分类和中间节目列表
             * IPTV上通过遥控器的方向控制会有多个区块进行互相跳转的情况 需要对每个区块进行定义
             */
            groupid:'',//分组ID
            /**
             * X,Y 是相对单一区块内的组件而言。每个区块的横纵坐标都是从1开始。
             */
            x:3,//默认横坐标,从1开始
            y:1,//默认纵坐标,从1开始
            row:4, //行
            col:4, //列
            prefix: 'remote_',//用于定位选中顺序的样式表前缀
            checkedCss:'remote_checked',//用于表示选中的样式表class
            parentObj:$,//上级HTML的Jquery对象,用于缩小CSS标签选择器搜索范围，提高搜索效率 默认 $
            //用于拼装获取当前选中的CSS样式表，格式为"prefix_x_y"
            getObj:function(){
                var cssTag= "."+this.prefix+this.x+"_"+this.y;
                console.log(cssTag);
                var obj = $(cssTag);
                return obj;
            },
            //重置
            reset:function(){
                this.x= 1 ;
                this.y= 1 ;
            },
            //设置样式表
            checked:function(obj){
                var obj = this.getObj();
                if(obj){
                    obj.addClass(this.checkedCss);
                }
                return obj;
            },
            //设置为非选中
            uncheck:function(obj){
                var obj = this.getObj();
                if(obj){
                    obj.removeClass(this.checkedCss);
                }
                return obj;
            },
            //对cookie进行封装
            cookie:{
                //读取页面选中状态Cookie
                load:function(){

                },
                //保存页面选中状态Cookie
                save:function(){

                },
                //删除页面选中状态Cookie
                del:function(){

                }
            },
            //初始化页面选中状态
            init:function(){
                this.checked();
            },
            //当前区块失去焦点时所做处理
            blockUnfocus:function(){

            },
            //当前区块获得焦点时所做处理
            blockFocus:function(){
                this.init();
            }
        }
    });
}));